<?php

class Core {

    protected static $_modules = array();

    /**
     * 
     * @param array $modules
     * @return type
     * 
     */
    public static function modules(array $modules = null) {
        if ($modules === NULL) {
            return Core::$_modules;
        }
        
        Core::$_modules = $modules;

        foreach (Core::$_modules as $key => $data) {
            $path = $data . DIRECTORY_SEPARATOR . ucfirst($key) . EXT;
            if (is_file($path)) {
                require_once $path;
            }
        }
        return Core::$_modules;
    }
    
    /**
     * 
     * @param type $filename
     * @return type
     * 
     */
    function permission($filename) {
        $perms = fileperms($filename);

        if (($perms & 0xC000) == 0xC000) {
            $info = 's';
        } elseif (($perms & 0xA000) == 0xA000) {
            $info = 'l';
        } elseif (($perms & 0x8000) == 0x8000) {
            $info = '-';
        } elseif (($perms & 0x6000) == 0x6000) {
            $info = 'b';
        } elseif (($perms & 0x4000) == 0x4000) {
            $info = 'd';
        } elseif (($perms & 0x2000) == 0x2000) {
            $info = 'c';
        } elseif (($perms & 0x1000) == 0x1000) {
            $info = 'p';
        } else {
            $info = 'u';
        }

        // владелец
        $info .= (($perms & 0x0100) ? 'r' : '-');
        $info .= (($perms & 0x0080) ? 'w' : '-');
        $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));

        // группа
        $info .= (($perms & 0x0020) ? 'r' : '-');
        $info .= (($perms & 0x0010) ? 'w' : '-');
        $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));

        // все
        $info .= (($perms & 0x0004) ? 'r' : '-');
        $info .= (($perms & 0x0002) ? 'w' : '-');
        $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));

        return $info;
    }
    
    /**
     * 
     * @param string $dir
     * @return type
     * 
     */
    function dir_list($dir) {
        if ($dir[strlen($dir) - 1] != '/')
            $dir .= '/';

        if (!is_dir($dir))
            return array();

        $dir_handle = opendir($dir);
        $dir_objects = array();
        while ($object = readdir($dir_handle))
            if (!in_array($object, array('.', '..'))) {
                $filename = $dir . $object;
                $file_object = array(
                    'name' => $object,
                    'size' => filesize($filename),
                    'perm' => permission($filename),
                    'type' => filetype($filename),
                    'time' => date("d F Y H:i:s", filemtime($filename))
                );
                $dir_objects[] = $file_object;
            }

        return $dir_objects;
    }

}

?>
